package com.jack.hiltsimple.third_sdk

import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import okhttp3.OkHttpClient
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import java.util.concurrent.TimeUnit
import javax.inject.Singleton

/**
 * @创建者 Jack
 * @创建时间 2025-08-21 11:10
 * @描述
 */
// NetworkModule.kt
@Module // 1. 声明这是一个模块
@InstallIn(SingletonComponent::class) // 2. 安装在应用级组件中，全局单例
object NetworkModule { // 通常声明为 object（单例），因为不需要状态

    @Provides // 3. 标记这是一个提供依赖的方法
    @Singleton // 4. 声明提供的实例是单例的
    fun provideOkHttpClient(): OkHttpClient {
        return OkHttpClient.Builder()
            .connectTimeout(20, TimeUnit.SECONDS)
            .readTimeout(20, TimeUnit.SECONDS)
            .build()
    }

    @Provides
    @Singleton
    fun provideRetrofit(okHttpClient: OkHttpClient): Retrofit {
        // 注意：参数 okHttpClient 由 Hilt 调用上面的 provideOkHttpClient 方法自动提供
        return Retrofit.Builder()
            .baseUrl("https://www.wanandroid.com/")
            .client(okHttpClient)
            .addConverterFactory(GsonConverterFactory.create())
            .build()
    }

    @Provides
    @Singleton
    fun provideApiService(retrofit: Retrofit): ApiService {
        // 参数 retrofit 由上面的 provideRetrofit 方法提供
        return retrofit.create(ApiService::class.java)
    }
}